package com.bw.aop;

import com.alibaba.fastjson.JSON;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

//@Component
//@Aspect
public class Myaop {


    /**
     * aop 的前置通知
     * @param joinPoint
     */
    // 切入点表达式
    @Before("execution( * com.bw.service.*.*(..))") // before 在原方法执行之前 执行
    public void before(JoinPoint joinPoint){
        String name = joinPoint.getSignature().getName(); //获取当前方法的方法名
        Object[] args = joinPoint.getArgs(); //获取当前方法的入参
        System.out.println(name + "入参是" + JSON.toJSONString(args));

    }

    //后置增强，方法正常退出时执行
    @AfterReturning("execution( * com.bw.service.*.*(..))")
    public void afterRunning() {
        System.out.println("----@AfterReturning 方法正常退出时执行------");
    }
    //异常抛出增强
    @AfterThrowing("execution( * com.bw.service.*.*(..))")
    public void afterThrow() {
        System.out.println("----@AfterThrowing 异常时执行------");
    }
    //final增强，不管是抛出异常或者正常退出都会执行
    @After("execution( * com.bw.service.*.*(..))")
    public void afterFinal() {
        System.out.println("----@After 最后一定会执行------");
    }



}
